﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Text.RegularExpressions;
using System.IO;
using System.Windows.Forms;
using System.Net;
namespace ServerTCP
{
   public class SendFileUDP
    {
       public string RecevieFileName()
       {
           string filename = "";
           
            //dùng để chuyển ký tự về chuổi
            ASCIIEncoding utf8 = new ASCIIEncoding();
            int Size = 1024;// ký thước để nhận dữ liệu
            int port = 8080; // port 
        //    MessageBox.Show("Server kết nối........");
            // tạo socket sữ dụng giao thức UPD
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
          ///  MessageBox.Show("Đã kết nối từ " + s.RemoteEndPoint);
            // tạo chỗ để chứa liệu để nhận 
            byte[] data = new byte[Size];
            //tạo ra một đối tượng chứa địa chỉ host và port
            IPEndPoint Address_Ip = new IPEndPoint(IPAddress.Any,port);
            // mở kết nối với địa chỉ host và ip
            s.Bind(Address_Ip);
            EndPoint remoteEP = Address_Ip;
            // lắng nghe client gởi giử liệu qua
            int BytesRecevied = s.Receive(data);// s.ReceiveFrom(data, ref remoteEP);
            // chuyển dữ liệu đã nhận từ dạng ký tự sang chuổi
            string chuoi = utf8.GetString(data);//System.Text.ASCIIEncoding.ASCII.GetString(data);
            string[] a = Regex.Split(chuoi, "\0");

            filename = a[0];
            s.Close();
           return filename;
         

       }
       public int ReceiveContentfileUDP(string filename)
       {
           int kq = 0;
           ASCIIEncoding utf8 = new ASCIIEncoding();
           int Size = 1400;// ký thước để nhận dữ liệu
           int port = 8080; // port 
           String path = @"d:\" + filename;
          // MessageBox.Show("Server kết nối........");
           IPEndPoint Address_Ip = new IPEndPoint(IPAddress.Any, port);
           Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
           s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
           EndPoint remoteEP = Address_Ip;
           s.Bind(Address_Ip);

           // MessageBox.Show("Đã kết nối từ " + s.RemoteEndPoint);
           byte[] data = new byte[Size];
           bool kt = false;
           FileStream fs = new FileStream(path, FileMode.Create);
           while (!kt)
           {

               for (int i = 0; i < data.Length; i++)
               {
                   data[i] = 0;
               }

               // lắng nghe client gởi giử liệu qua
               int flag = s.Receive(data);
               if (flag < 1400)
               {
                   fs.Write(data, 0, flag);
                   kt = true;
               }
               else
               {
                   fs.Write(data, 0, data.Length);
               }


               kq = 1;
           }

           fs.Close();
           s.Close();
           return kq;
       }
    }
}
